<?php
/**
 * ===============================================
 * 版权所有 2019-2050 青岛铁锤科技有限公司，并保留所有权利。
 * 网站地址: http://www.huaxianling.com
 * ===============================================
 * Author: Alex
 * Created Time: 2019/9/13 10:27
 * Modified Time: 2019/9/13 10:27
 * Version: 2.0
 */
namespace App\Modules\System\Transformers;
use League\Fractal\TransformerAbstract;
class VersionTransformer extends TransformerAbstract
{
    private $row;
    private $new_version;
    public function __construct($row,$new_version){
        $this->row          = $row;
        $this->new_version  = $new_version;
    }
    public function transform(){
        $result = [
            'update' => 'No'
        ];
        if( $this->row && $this->new_version ){
            if($this->versionCompare($this->row['release_number'] , $this->new_version) === 1){
                $result =  [
                    "update"      => "Yes",    //有新版本
                    "new_version" => $this->row['release_number'],  //新版本号
                    "apk_file_url"=> $this->row['down_url'],        //apk下载地址
                    "update_log"  => $this->row['version_info'],    //更新内容
                    "target_size" => $this->row['file_size'],       //apk大小
                    "new_md5"     => "A818AD325EACC199BC62C552A32C35F2",
                    "constraint"  => $this->row['force'] == 1    //是否强制更新
                ];
            }
        }
        return $result;
    }


    /**
    * 版本号比较
    * @param $version1 版本A 如:5.3.2
    * @param $version2 版本B 如:5.3.0
    * @return int -1 版本A小于版本B , 0版本A等于版本B, 1版本A大于版本B
    * @throws
     *    版本号格式注意：
    *        1.要求只包含:点和大于等于0小于等于2147483646的整数 的组合
    *        2.boole型 true置1，false置0
    *        3.不设位默认补0计算，如：版本号5等于版号5.0.0
    *        4.不包括数字 或 负数 的版本号 ,统一按0处理
    *    @example:
    *       if (versionCompare('5.2.2','5.3.0')<0) {
    *            echo '版本1小于版本2';
    *       }
    */
    function versionCompare($versionA,$versionB) {
        if ($versionA>2147483646 || $versionB>2147483646) {
            throw new \Exception('版本号,位数太大暂不支持!','101');
        }
        $dm = '.';
        $verListA = explode($dm, (string)$versionA);
        $verListB = explode($dm, (string)$versionB);

        $len = max(count($verListA),count($verListB));
        $i = -1;
        while ($i++<$len) {
            $verListA[$i] = intval(@$verListA[$i]);
            if ($verListA[$i] <0 ) {
                $verListA[$i] = 0;
            }
            $verListB[$i] = intval(@$verListB[$i]);
            if ($verListB[$i] <0 ) {
                $verListB[$i] = 0;
            }

            if ($verListA[$i]>$verListB[$i]) {
                return 1;
            } else if ($verListA[$i]<$verListB[$i]) {
                return -1;
            } else if ($i==($len-1)) {
                return 0;
            }
        }
    }
}